package com.liming.coupon.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liming.common.pojo.dto.coupon.UserHomeCouponPageQuery;
import com.liming.common.pojo.entity.coupon.UserCoupon;

import java.util.List;
import java.util.Map;

/**
 * @author liming
 * @date 2025/1/19
 */
public interface UserCouponMircoService extends IService<UserCoupon> {

    /**
     * 用户优惠券领取次数 通过线程中的 用户ID来查询
     *
     * @return Map<优惠券Id ， 领取次数>
     */
    Map<Long, Long> userCouponGetFrequency();

    /**
     * 用户优惠券使用次数 通过线程中的 用户ID来查询
     *
     * @return Map<优惠券Id ， 使用次数>
     */
    Map<Long, Long> userCouponUseFrequency();

    /**
     * 用户优惠券数量 通过线程中的 用户ID来查询
     *
     * @param id 优惠券id
     * @return 用户优惠券数量
     */
    long countByUserIdAndCouponId(Long id);

    /**
     * 用户拥有的 可使用的 优惠券ids
     *
     * @return List<优惠券id>
     */
    List<Long> userHaveCouponIds();

    /**
     * 用户拥有的 可使用的 优惠券IDS
     *
     * @param pageQuery 分页参数
     * @return 分页数据
     */
    IPage<Long> userHaveCouponIdsPage(UserHomeCouponPageQuery pageQuery);

    /**
     * 用户使用优惠券
     *
     * @param couponId 优惠券ID
     * @return 是否使用成功
     */
    boolean userUseCoupon(Long couponId);
}
